iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 24
0
Modern Web

我每天都接一個API系列 第 24

[30apis] Day 23 : Bitext API (語意處理)

  • 分享至 

  • xImage
  •  

Bitext 是一間主攻自然語言處理(Natural Language Processing NLP)的新創,他們的產品主要是讓機器能夠讀懂人類的文字,比方說判斷一句話是褒義還是貶義、判斷詞性、找出關鍵字,甚至是重寫句子。

我一直以來都蠻想嘗試類似的主題,當提到人工智慧 AI 的時候,NLP 是一大重點。但不管是 AI 或 NLP,都聽起來離我非常遙遠,作為前端新手,很難在這些看起來高深的詞彙裡找到自己面對它們的方法,不知道該怎麼利用這些東西。

今天找到這個 API,雖然他的語言處理沒有支援中文,但還是相當有趣感覺可以做很多事,正好跟大家分享一下。

先來申請一個帳號:

申請完之後,就可以拿到 API Key 了。進入 Bitext API 文件頁面來研究一下。

他們的文件也是挺簡陋的。

基本上,Bitext 提供的服務分成兩種:
(這邊都是一些語意處理的專有名詞,我就不試圖翻譯了)

  • 自然語言處理&機器學習服務
    • **Lemmatization:**將詞根相同的字歸類在一起,像是搜尋 people 跟 person 能得到一樣的結果

來源:https://zh.wikipedia.org/wiki/%E8%AF%8D%E5%B9%B2%E6%8F%90%E5%8F%96

  • **POS Tagging :**根據前後文判斷標註詞性

  • **Phrase Extraction :**輸入一個句子然後回傳句子的各部分組成,把有意義的字歸類在一起。比方說把 “You should eat your dinner” 分成 ”You(noun), should eat(verb), your dinner(noun)” 而不是 “You should, eat your, dinner”

  • **Entities:**抓取文字裡的名字、人物、時間、地點等

  • **Sentiment Analysis:**判斷一個句子或片語將它們跟文字的情緒連結,判斷寫作者的想法是正面還是負面的

  • 聊天機器人服務

    • **Slot Generation:**生成(讓聊天機器人能理解的)語句模型
    • **Sentence Rewriting:**把給機器人的複雜指令重寫成機器人能理解的句子

由於對 NLP 並不熟悉,所以我把他的 Demo 玩過一遍,比較清楚知道各功能可以幹嘛。

都玩過一遍之後,我決定要使用 POS Tagging 來實作。先翻到他的文件區域

簡單來說,想要利用 Bitext 的服務,你必須先使用 HTTP Method 中的 POST 把你的資料傳給他們,他們會回傳一個 resultid 給你,然後你再拿這個 id 用 GET 的方法把分析結果抓下來。

Base URL 是 "https://svc02.api.bitext.com/postagging/``"

Authentication 要被放在 Header裡面,所以使用 .setRequestHeader() 來放:

  xhr.setRequestHeader(
    "Authorization",
    "bearer [api Key放這邊]"
  );
  
  xhr.setRequestHeader(
  "Content-Type", 
  "application/json"
  );

而要傳進對方服務器的資料,要放在 request body 裡,這邊要注意的是要放進去的是JSON 而不是 Object,所以要加上 JSON.stringify(data)轉成字串。

一個 POST Request:

var url = "https://svc02.api.bitext.com/postagging/";
var data = {
  language: "eng",
  text:
    "I love You"
};
var result;
function makeRequest() {
  xhr = new XMLHttpRequest();
  xhr.onload = function() {
    var response = JSON.parse(this.responseText);
    console.log(response);
    result = response.resultid;
  };
  xhr.open("POST", url, true);
  xhr.setRequestHeader(
    "Authorization",
    "bearer 8fb4655313ae4e9d9036fdafd09cb1ca"
  );
  xhr.setRequestHeader("Content-Type", "application/json");
  xhr.send(JSON.stringify(data));
}

Response:

接著再寫一個 GET Request:

function retriveData() {
  xhr = new XMLHttpRequest();
  xhr.onload = function() {
    var response = JSON.parse(this.responseText);
    console.log(response);
  };
  xhr.open("GET", url + result, true);
  xhr.setRequestHeader(
    "Authorization",
    "bearer 8fb4655313ae4e9d9036fdafd09cb1ca"
  );
  xhr.setRequestHeader("Content-Type", "application/json");
  xhr.send();
}

Response:

這樣就完成啦。

最後成果:

Codepen 連結


上一篇
[30apis] Day 22:NYTimes API
下一篇
[30apis] Day 24 : WRLD API
系列文
我每天都接一個API30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言